
在 Day 9 文章中,我們結合 LINE 平台的功能,將天氣服務與圖片上傳服務整合,打造出第一張 LINE 圖文選單,透過 URI action 的方式觸發平台提供的互動效果。接著,我們使用客製化選單製作出 9 格的客製化圖文選單,嘗試一般實務上常見的客製化模板。
今天我們要補上圖文選單切換的功能,讓整體功能更貼合目前官方帳號圖文選單的完整體驗。
本節資料參考來源:Jirawatee - 透過 Rich Menu Switch Action 快速地切換 LINE 的個人化的 Rich Menu
過去設計超過六格功能的 LINE 圖文選單時,我們會考慮使用兩個選單來實現。還記得 Day 9 提到的 LINE 圖文選單可以設置「官方帳號預設圖文選單」和「個人預設圖文選單」兩種類型嗎?
我們可以設計兩個圖文選單,當使用者點擊時,LINE 平台會透過 Webhook 將對應事件傳遞至後端伺服器。接著透過 LINE Messaging API 呼叫「個人預設圖文選單 API」,將使用者的選單切換成另一張,且不會影響其他用戶的使用體驗。

LINE 後端設置圖文選單流程圖:
More,向 LINE 平台發送事件Webhook 將事件傳送至後端伺服器Rich Menu API 向 LINE 平台發送變更請求這樣的流程在傳輸上必然存在延遲問題,因為需要經過後端伺服器處理後再返回給使用者,導致點擊時會產生明顯的卡頓感,影響使用者體驗。
LINE Rich Menu Switch Action 流程圖:
這個功能是為了解決上述提及的卡頓問題而生,能有效降低傳輸成本,提升切換體驗 !

事前準備:需要為待切換的圖文選單設定別名,定義從 A 圖文選單點擊後要切換到哪個圖文選單
More,向 LINE 平台發送事件Tips:這部分實際在在後端伺服器還是會收到圖文選單變更的事件,但不需要由後端主動發起變更圖文選單的請求
LINE 官網 LINE Richmenu Action 資訊
在 Day 9 設置 Line Richmenu Area Action 的時候,我們只使用了 Message action 及 URI action 的部分。實際上還有一個特殊的 Rich Menu Switch Action,專門用於切換不同的 LINE 圖文選單。
今天將基於 Day9 的九格客製化模板,新增兩個圖文選單切換按鈕。
回到 Canva 設計工具,將按鈕補上後變成 10 個區塊的完整版本。
這邊注意我們需要兩個圖文選單,所以也需要兩張背景圖喔!
(創建 LINE 圖文選單的方式同樣透過 Canva,流程與 Day 9 相同)
Line 圖文選單 1 號選手(別名:richmenu-player-1)
這邊特別讓
選單 1小一點,是為了凸顯當前是選單 1的狀態,背景圖就需要設計被點擊到的狀態

Line 圖文選單 2 號選手(別名:richmenu-player-2)
這邊特別讓
選單 2小一點,是為了凸顯當前是選單 2的狀態,背景圖就需要設計被點擊到的狀態

這邊會以圖文選單 1 號選手為例教學
由於 LINE Bot Designer 不支援 Rich Menu Switch Action 的直接配置,為了讓大家能快速體驗切換效果,我們先將需要設定的部分暫時使用「訊息事件」替代,後續再手動調整 JSON 內容。

特別注意圖文選單有參數
name建議可以改成好理解的識別名稱
(撈出圖文選單列表的時候會比較好區分)
雖然 LINE Bot Designer 可以快速建立 Rich Menu 的完整骨架,但無法直接設置 Rich Menu Switch Action。因此我們需要手動調整「選單 1」和「選單 2」的切換設定。
修改前:使用訊息(message)回覆方式
{
"bounds": {
"x": 0,
"y": 0,
"width": 1250,
"height": 422
},
"action": {
"type": "message",
"text": "選單 1(圖文選單 1 號選手)"
}
}
修改後:改為 richmenuswitch 方式
{
"bounds": {
"x": 0,
"y": 0,
"width": 1250,
"height": 422
},
"action": {
"type": "richmenuswitch",
"richMenuAliasId": "richmenu-player-1", // 定義每張 Line 圖文選單別名
"data":"Line 圖文選單目前切換到選手 1 號囉!" // 切換的時候後端可以接收到對應的訊息
}
}
透過以上方式修改「選單 1」和「選單 2」的 action 設定後,接著使用 Postman 進行 API 設置。
設定流程與
Day 9大致相同
Step 3 修改的 richmenuswitch 類型 JSON,並且需要創建兩個圖文選單!「選手 1 號」,「選手 2 號」則透過 Rich Menu Switch Action 切換顯示主要設定 API::
Step 3 修改的 richmenuswitch 類型 JSON「選手 1 號」設為官方帳號預設選單設定別名前必須先完成 Step 4 的流程!!
主要設定 API::
錯誤修正時可能用到的 API:
刪除圖文選單時,別名不會自動清除,需要手動刪除,這部分很重要喔!!
成功實作 LINE Rich Menu Switch Action!透過圖文選單別名設定,實現兩個自定義選單間的切換,解決了過去需要在後端伺服器透過 Rich Menu API 切換的延遲問題。

本週我們完成了 LINE 圖文選單功能的完整升級歷程,從最初的固定模版圖文選單設計,逐步發展到客製化選單的彈性配置,最終實現了圖文選單切換功能。這項功能在 LINE Bot 實務應用中常見且重要,一般來說,多數應用場景都是採用 2~3 個模板進行動態切換,以滿足不同使用情境的需求。
若未來需要更進階的應用,例如根據會員登入狀態來顯示不同的專屬選單,這類個人化功能仍需透過後端伺服器進行使用者身份驗證,再採用傳統的 Rich Menu API 呼叫方式來動態變更個人專屬的圖文選單。